介绍
在使用golang过程中,经常会启动很多个go协程。然而如何方便地等待这些协程的结束呢?
这里介绍一个struct 那就是WaitGroup
WaitGroup 总共有3 个函数:
- Add(delta int) 添加计数
- Done() 减少计数
- Wait() 等待计数等于0
注: Done() 其实就是Add(-1)
使用
- 每启动一个goroutine 时,调用Add 函数计数加一。
- 每结束一个goroutine 时,调用Done 函数计数减一。
示例 waitgroup.go
package main
import (
"net/http"
"sync"
)
func main() {
var wg sync.WaitGroup
var urls = []string{
"http://www.baidu.com/",
"http://www.somestupidname.com/",
}
for _, url := range urls {
// 添加WaitGroup 计数器.
wg.Add(1)
// 运行一个协程去获取 URL.
go func(url string) {
// 当协程结束时,计数器减一
defer wg.Done()
// 获取 URL.
http.Get(url)
}(url)
}
// 等待所有url获取完成
wg.Wait()
}